<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>01-函数的定义和调用方式</title>
</head>

<body>
  <script>
    // 函数的定义放
    // 1.[命名函数] 自定义函数
    function fn() { };

    // 2.[匿名函数] 函数表达式
    var fun = function () { };

    // 3. 利用 new Function('参数1', '参数2', '函数体');
    // [方法说明] 不友好，执行效率低(得先将函数体中的字符串解析成js能够识别的代码，比平常js执行多了一步)
    var f = new Function('a', 'b', 'console.log("[new Function] "+(a + b))');
    // [参数说明]
    // 1 --> a
    // 2 --> b
    // a + b = 4
    f(1, 3);

    // 4. 所有的函数都是 Function 的实例(对象)
    // [证明] 只要是实例/对象 内部都包含原型 __proto__
    // 函数也属于对象
    // 所以只要查看f函数方法内容是否包含 __proto__ 即可
    // dir() 打印属性与方法
    console.dir(f);
    // instanceof 前者是否属于后者
    console.log(f instanceof Function);
  </script>
</body>

</html>